<?php
/**
 * @see ZendX_JQuery_View_Helper_UiWidget
 */
require_once "ZendX/JQuery/View/Helper/UiWidget.php";

/**
 * Помощник вида, реализующий множественный выбор элементов субформ
 * 
 * @category Phorm
 * @package JQuery_View_Helper
 * @name /Phorm/JQuery/View/Helper/MultiElement.php
 * @copyright phorm.ru
 * @since 13.03.2012
 * @author vladimir@kachalov.net
 */

class Phorm_JQuery_View_Helper_MultiElement extends ZendX_JQuery_View_Helper_UiWidget {
	
	/**
	 * Рисуем элемент
	 *
	 * @param string $id Id HTML-элемента
	 * @param string $value Значение элемента
	 * @param array $params Массив конфигурации из секции options
	 * @return string
	 */
    
	public function multiElement($id, $value = null, array $params = array()) {
		
		$translate = $params['translate'];
		
		/**
		 * Определяем форму с элементами группы
		 * Добавляем фолрму в JS
		 */
		
		$js_var = $id . '_subform';
		if(isset($params['renderform'])) {
			$this->jquery->addJavascript('var ' . $js_var . ' = ' . ZendX_JQuery::encodeJson($params['renderform']) . ';');
		}
		
		/**
	     * Определяем иконку удаления группы
	     */
	    
	    $icon_delete = '<a href="#" class="delete ui-corner-all ui-button ui-state-default" title="'.$translate->_('Удалить').'"><span class="ui-icon ui-icon-close"></span></a>';
		
		/**
	     * Формируем кнопку добавления новой группы и вешаем на нее JS
	     */
	    
		$button_id = $id . '_add';
		$button_opts = isset($params['button']) ? $params['button'] : array();
		$button_direction = isset($params['button']['direction']) && $params['button']['direction']=='top' ? 'top' : 'bottom';
	    $button = $this->view->button($button_id, $translate->_('Добавить'), array(), $button_opts);
	    
	    $jquery_handler = ZendX_JQuery_View_Helper_JQuery::getJQueryHandler();
	    
	    $js = array();
	    
	    $dir = $button_direction=='top' ? 'next' : 'prev';
	    
	    $js[] = sprintf('%s("#%s").'.$dir.'("ul").find("> li").prepend(%s("%s").click(function(){
		    	if(confirm("%s")) %s(this).parent("li").remove();
				return false;
		    }).css("position","absolute").css("right","8px"));',
		$jquery_handler, $button_id, $jquery_handler, addslashes($icon_delete), $translate->_('Удалить').'?', $jquery_handler);
	    
	    $js[] = sprintf('%s("#%s").click(function(){
		    	var itr = %s(this).'.$dir.'("ul").find("> li").length-1;
		    	var Tmpl = %s.replace(/name=\"%s\[\]\[/g,"name=\"%s["+itr+"][").replace(/id=\"%s\[\]-/g,"id=\"%s-"+itr+"-");
		    	var li = %s(this).'.$dir.'("ul").find("li:last").clone(true).insertBefore(%s(this).'.$dir.'("ul").find("li:last")).append(Tmpl).show();
	    	});',
        $jquery_handler, $button_id, $jquery_handler, $js_var, $id, $id, $id, $id, $jquery_handler, $jquery_handler);
        
        /**
         * Сортировка элементов группы
         */
        
        if(isset($params['sortable']) && $params['sortable']==true) {
        	$js[] = sprintf('%s("#%s").'.$dir.'("ul").sortable().find("li").css("cursor","move");',$jquery_handler,$button_id);
        }
	    
	    $this->jquery->addOnLoad(join(PHP_EOL,$js));
	    
	    /**
	     * Отрисовываем переданные группы и шаблон
	     */
	    
	    $xhtml = array();
	    $xhtml[] = '<ul>';
	    
	    $attribs = array();
	    foreach ($params as $k=>$v) if(in_array($k,array('class','style'))) $attribs[$k] = $v;
	    
	    /**
	     * Устанавливаем пришедшие значения
	     */
	    
		foreach ($params['forms'] as $key=>$form) {
	    	$form -> setElementsBelongTo($id . '['.$key.']');
	    	$xhtml[] = '<li' . $this->_htmlAttribs($attribs) . '>' . $form->render() . '<div class="clear"></div></li>';
	    }
	    
	    /**
	     * Отрисовываем "хвост" списка
	     */
	    
		if(isset($attribs['class'])) $attribs['class'] .= ' hidden'; else $attribs['class'] = 'hidden'; 
	    $xhtml[] = '<li' . $this->_htmlAttribs($attribs) . '></li>';
	    $xhtml[] = '</ul>';
		
	    
	    return $button_direction=='top' ? $button . join(PHP_EOL,$xhtml) : join(PHP_EOL,$xhtml) . $button;
		
	}
	
}